# 实体

会话中的实体记忆功能可以记住关于特定实体的给定信息。它提取实体的信息（使用LLM）并随着时间建立其对该实体的了解（还使用LLM）。

先让我们了解如何使用此功能。

```python
from langchain_openai import OpenAI
from langchain.memory import ConversationEntityMemory
llm = OpenAI(temperature=0)
```

```python
memory = ConversationEntityMemory(llm=llm)
_input = {"input": "Deven & Sam are working on a hackathon project"}
memory.load_memory_variables(_input)
memory.save_context(
    _input,
    {"output": " That sounds like a great project! What kind of project are they working on?"}
)
```

```python
memory.load_memory_variables({"input": 'who is Sam'})
```

---



```
    {'history': 'Human: Deven & Sam are working on a hackathon project\nAI:  That sounds like a great project! What kind of project are they working on?',
     'entities': {'Sam': 'Sam is working on a hackathon project with Deven.'}}
```

---




```python
memory = ConversationEntityMemory(llm=llm, return_messages=True)
_input = {"input": "Deven & Sam are working on a hackathon project"}
memory.load_memory_variables(_input)
memory.save_context(
    _input,
    {"output": " That sounds like a great project! What kind of project are they working on?"}
)
```

```python
memory.load_memory_variables({"input": 'who is Sam'})
```

---



```
    {'history': [HumanMessage(content='Deven & Sam are working on a hackathon project', additional_kwargs={}),
      AIMessage(content=' That sounds like a great project! What kind of project are they working on?', additional_kwargs={})],
     'entities': {'Sam': 'Sam is working on a hackathon project with Deven.'}}
```

---



## 在链中使用
现在让我们在链中使用它！

```python
from langchain.chains import ConversationChain
from langchain.memory import ConversationEntityMemory
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE
from pydantic import BaseModel
from typing import List, Dict, Any
```

```python
conversation = ConversationChain(
    llm=llm,
    verbose=True,
    prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,
    memory=ConversationEntityMemory(llm=llm)
)
```

```python
conversation.predict(input="Deven & Sam are working on a hackathon project")
```

---



```
    > 进入新的ConversationChain链...
    格式化后的提示：
    作为一位助手，由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务，从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型，您可以根据接收到的输入生成类似人类的文本，通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进，您的能力也在不断发展。您可以处理并理解大量文本，并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分，您可以访问由用户提供的一些个性化信息。此外，您可以根据接收的输入生成自己的文本，让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说，您是一个强大的工具，可以帮助各种任务，并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题，您都在这里提供帮助。

    上下文：
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目'}
    
    当前对话：
    用户：Deven & Sam are working on a hackathon project
    您：

    > 完成对话链。
    
    
    ' That sounds like a great project! What kind of project are they working on?'
```

---



```python
conversation.memory.entity_store.store
```

---



```
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目，他们正在参加一项黑客马拉松赛事。',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目'}
```

---



```python
conversation.predict(input="They are trying to add more complex memory structures to Langchain")
```

---



```
    > 进入新的ConversationChain链...
    格式化后的提示：
    作为一位助手，由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务，从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型，您可以根据接收到的输入生成类似人类的文本，通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进，您的能力也在不断发展。您可以处理并理解大量文本，并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分，您可以访问由用户提供的一些个性化信息。此外，您可以根据接收的输入生成自己的文本，让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说，您是一个强大的工具，可以帮助各种任务，并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题，您都在这里提供帮助。

    上下文：
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目，他们正在参加一项黑客马拉松赛事。',
     'Langchain': ''}
    
    当前对话：
    用户：Deven & Sam are working on a hackathon project
    AI:  That sounds like a great project! What kind of project are they working on?
    用户：They are trying to add more complex memory structures to Langchain
    您：

    > 完成对话链。
    
    
    
    ' That sounds like an interesting project! What kind of memory structures are they trying to add?'
```

---



```python
conversation.predict(input="They are adding in a key-value store for entities mentioned so far in the conversation.")
```

---



```
    > 进入新的ConversationChain链...
    格式化后的提示：
    作为一位助手，由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务，从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型，您可以根据接收到的输入生成类似人类的文本，通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进，您的能力也在不断发展。您可以处理并理解大量文本，并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分，您可以访问由用户提供的一些个性化信息。此外，您可以根据接收的输入生成自己的文本，让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说，您是一个强大的工具，可以帮助各种任务，并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题，您都在这里提供帮助。

    上下文：
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目，他们正在参加一项黑客马拉松赛事。',
     'Langchain': 'Langchain是一个尝试添加更复杂的内存结构，包括一个key-value存储，用于保存迄今为止在对话中提到的实体。'}
    
    当前对话：
    用户：Deven & Sam are working on a hackathon project
    AI: That sounds like a great project! What kind of project are they working on?
    用户：They are trying to add more complex memory structures to Langchain
    AI:  That sounds like an interesting project! What kind of memory structures are they trying to add?
    用户：They are adding in a key-value store for entities mentioned so far in the conversation.
    您:

    > 完成对话链。
    
    ' That sounds like a great idea! How will the key-value store help with the project?'
```

---



```python
conversation.predict(input="What do you know about Deven & Sam?")
```

---



```
    > 进入新的ConversationChain链...
    格式化后的提示：
    作为一位助手，由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务，从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型，您可以根据接收到的输入生成类似人类的文本，通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进，您的能力也在不断发展。您可以处理并理解大量文本，并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分，您可以访问由用户提供的一些个性化信息。此外，您可以根据接收的输入生成自己的文本，让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说，您是一个强大的工具，可以帮助各种任务，并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题，您都在这里提供帮助。

    上下文：
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目，他们正在参加一项黑客马拉松赛事。他们试图将更复杂的内存结构添加到Langchain中，包括用于保存迄今为止在对话中提到的实体的key-value存储。',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目。他们试图将更复杂的内存结构添加到Langchain中，包括用于保存迄今为止在对话中提到的实体的key-value存储。'}
    
    当前对话：
    用户：Deven & Sam are working on a hackathon project
    AI:  That sounds like a great project! What kind of project are they working on?
    用户：They are trying to add more complex memory structures to Langchain
    AI:  That sounds like an interesting project! What kind of memory structures are they trying to add?
    用户：They are adding in a key-value store for entities mentioned so far in the conversation.
    AI:  That sounds like a great idea! How will the key-value store help with the project?
    用户：What do you know about Deven & Sam?
    您:

    > 完成对话链。
    
    
    
    ' Deven and Sam are working on a hackathon project together, trying to add more complex memory structures to Langchain, including a key-value store for entities mentioned so far in the conversation. They seem to be working hard on this project and have a great idea for how the key-value store can help.'
```

---



## 检查内存存储
我们也可以直接检查内存存储。在以下示例中，我们先查看它，然后通过一些添加信息的示例查看其变化。

```python
from pprint import pprint
pprint(conversation.memory.entity_store.store)
```

---



```
    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur.',
     'Deven': 'Deven is working on a hackathon project with Sam, which they are '
              'entering into a hackathon. They are trying to add more complex '
              'memory structures to Langchain, including a key-value store for '
              'entities mentioned so far in the conversation, and seem to be '
              'working hard on this project with a great idea for how the '
              'key-value store can help.',
     'Key-Value Store': 'A key-value store is being added to the project to store '
                        'entities mentioned in the conversation.',
     'Langchain': 'Langchain is a project that is trying to add more complex '
                  'memory structures, including a key-value store for entities '
                  'mentioned so far in the conversation.',
     'Sam': 'Sam is working on a hackathon project with Deven, trying to add more '
            'complex memory structures to Langchain, including a key-value store '
            'for entities mentioned so far in the conversation. They seem to have '
            'a great idea for how the key-value store can help, and Sam is also '
            'the founder of a company called Daimon.'}
```

---



```python
conversation.predict(input="Sam is the founder of a company called Daimon.")
```

---



```


    > 进入新的ConversationChain链...
    格式化后的提示：
    作为一位助手，由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务，从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型，您可以根据接收到的输入生成类似人类的文本，通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进，您的能力也在不断发展。您可以处理并理解大量文本，并可利用这些知识对各种问题提供准确和信息丰富的回应。您可以根据接收的输入生成自己的文本，允许您进行讨论并提供对各种主题的解释和描述。

    总的来说，您是一个强大的工具，可以帮助各种任务，并提供对各种主题的有价值见解和信息。无论是回答特定问题还是关于特定主题的对话，您都在这里提供帮助。

    Context:
    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur, who '
               'is working on a hackathon project with Deven to add more complex '
               'memory structures to Langchain.',
     'Sam': 'Sam is working on a hackathon project with Deven, trying to add more '
            'complex memory structures to Langchain, including a key-value store '
            'for entities mentioned so far in the conversation. They seem to have '
            'a great idea for how the key-value store can help, and Sam is also '
            'the founder of a company called Daimon.'}
```

---



```python
from pprint import pprint
pprint(conversation.memory.entity_store.store)
```

---



```
    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur, who '
               'is working on a hackathon project with Deven to add more complex '
               'memory